package com.agilya.controller;

import java.io.IOException;
import java.util.ArrayList;

import javax.inject.Inject;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.agilya.dao.DAOChapitre;
import com.agilya.dao.daointerface.ChapitreDAO;
import com.agilya.dao.exception.DAOExceptions;
import com.agilya.modele.Chapitre;

/**
 * Servlet implementation class SaisieChapitre.
 * 
 * Permet de saisir un nouveau chapitre (nom et code chapitre) ou de modifier
 * 
 * 
 **/
@WebServlet("/SaisirChapitre")
public class SaisirChapitre extends HttpServlet {
	private static final long serialVersionUID = 1L;
	@Inject
	@DAOChapitre
	private ChapitreDAO chapitredao;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public SaisirChapitre() {
		super();
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		RequestDispatcher rd;
		request.setAttribute("page", "/saisirChapitre.jsp");

		/**
		 * Action modifier un chapitre
		 */
		String action = (String) request.getParameter("action");
		Integer idChapitre = null;
		Chapitre chapitre = null;
		try {
			// si l'action Modification de chapitre
			if (action != null && action.equals("modification")) {

				idChapitre = Integer.parseInt(request.getParameter("idChapitre"));
				// recupere le chapitre par son id
				chapitre = chapitredao.getChapitreById(idChapitre);
				// on met en paramètre les valeurs du chapitre
				request.setAttribute("idChapitre", chapitre.getId());
				request.setAttribute("nomChapitre", chapitre.getNom());
				request.setAttribute("codeChapitre", chapitre.getCode());

			}
		} catch (DAOExceptions e) {
			request.setAttribute("erreurPage", "Impossible de récupérer le chapitre. Veuillez recommencer plus tard");

		}
		rd = request.getRequestDispatcher("/page.jsp");
		rd.forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		// Liste des champs
		Integer idChapitre = null;
		String nomChapitre = null;
		String codeChapitre;

		// crée la liste des erreurs
		ArrayList<String> erreurs = new ArrayList<>();

		RequestDispatcher rd = null;

		// saisir des valeurs d'un chapitre
		try {
			idChapitre = Integer.parseInt(request.getParameter("idChapitre"));
		} catch (NumberFormatException e) {
			// request.setAttribute("erreurPage", "Une zert est survenue, veuillez recommencer plus tard");
			// rd = request.getRequestDispatcher("/AfficherChapitre");
			// rd.forward(request, response);
			idChapitre = null;
		}

		nomChapitre = (String) request.getParameter("nomChapitre");
		System.out.println("nom chapitre : " + nomChapitre);
		if (nomChapitre == null || nomChapitre.equals("")) {
			erreurs.add("Nom du chapitre requis");
		}

		codeChapitre = (String) request.getParameter("codeChapitre");
		System.out.println("code chapitre : " + codeChapitre);
		if (codeChapitre == null || codeChapitre.equals("")) {
			erreurs.add("code du chapitre requis");
		}
		/**
		 * dans le cas des erreurs dans la saisie des valeurs d'un chapitre
		 */
		if (erreurs.size() > 0) {
			// recupere l'erreur
			request.setAttribute("erreurs", erreurs);
			request.setAttribute("idChapitre", idChapitre);
			request.setAttribute("nomChapitre", nomChapitre);
			request.setAttribute("codeChapitre", codeChapitre);

			request.setAttribute("Création non effectuée dans la base ", erreurs);
			request.setAttribute("page", "/saisirChapitre.jsp");
		} else {

			if (idChapitre == null) {
				Chapitre chapit;
				chapit = new Chapitre(codeChapitre, nomChapitre);

				try {

					// enregistrer des valeurs d'un chapitre saisie
					chapitredao.enregistrer(chapit); // apprenant a ajouter en parametre
					request.setAttribute("chapitreAjouter", nomChapitre);
					// request.setAttribute("page", "/AfficherChapitre");
					request.getRequestDispatcher("/AfficherChapitre").forward(request, response);
				} catch (DAOExceptions e) {
					e.printStackTrace();
					erreurs.add("Ce chapitre existe déja dans la base");
					request.setAttribute("page", "/saisirChapitre.jsp");
				}
			} else {
				Chapitre chapitre = new Chapitre(idChapitre, codeChapitre, nomChapitre);
				try {
					// Enregistrer la modification d'un chapitre
					chapitredao.modifier(chapitre); // apprenant a ajouter en parametre
					request.setAttribute("page", "/AfficherChapitre");
				} catch (DAOExceptions e) {
					e.printStackTrace();
					erreurs.add("Ce chapitre existe déja dans la base");
					request.setAttribute("page", "/saisirChapitre.jsp");
				}
			}
			rd = request.getRequestDispatcher("/page.jsp");
			rd.forward(request, response);

		}

		rd = request.getRequestDispatcher("/page.jsp");
		rd.forward(request, response);

	}
}
